{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "04b778a6-5cac-4da9-a62a-072bcabd917f",
   "metadata": {},
   "source": [
    "Chapter 12\n",
    "# 用数据帧创建有向图\n",
    "Book_6《数据有道》 | 鸢尾花书：从加减乘除到机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cec04b4b-f19b-4da5-a50b-2fbb33d7acd5",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import networkx as nx\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b860e41b-ed91-4b8a-97b6-3b01f6e07458",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建数据帧\n",
    "edges_df = pd.DataFrame({\n",
    "    'source': ['b', 'b', 'd', 'c', 'a'],\n",
    "    'target': ['a', 'd', 'c', 'b', 'c'],\n",
    "    'edge_key': ['ba', 'bd', 'dc', 'cb', 'ac'],\n",
    "    'weight': [1, 2, 3, 4, 5]})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e72c31f9-3e0d-446f-942b-fd7181019f9c",
   "metadata": {},
   "outputs": [],
   "source": [
    "edges_df.to_csv('edges_df.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "768b2b49-7fde-4c2c-9293-90a5ab7afd6b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source</th>\n",
       "      <th>target</th>\n",
       "      <th>edge_key</th>\n",
       "      <th>weight</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>b</td>\n",
       "      <td>a</td>\n",
       "      <td>ba</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b</td>\n",
       "      <td>d</td>\n",
       "      <td>bd</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>d</td>\n",
       "      <td>c</td>\n",
       "      <td>dc</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>c</td>\n",
       "      <td>b</td>\n",
       "      <td>cb</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>a</td>\n",
       "      <td>c</td>\n",
       "      <td>ac</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  source target edge_key  weight\n",
       "0      b      a       ba       1\n",
       "1      b      d       bd       2\n",
       "2      d      c       dc       3\n",
       "3      c      b       cb       4\n",
       "4      a      c       ac       5"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "edges_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bba4d37a-eb59-4a79-8171-8969ce023161",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建无向图\n",
    "G = nx.from_pandas_edgelist(\n",
    "    edges_df,\n",
    "    source = \"source\", \n",
    "    target = \"target\",\n",
    "    edge_key=\"edge_key\",\n",
    "    edge_attr=[\"weight\"],\n",
    "    create_using=nx.Graph())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e1d7d867-3d0c-4d65-ac8b-0d207e85703e",
   "metadata": {},
   "outputs": [],
   "source": [
    "G_edge_labels = nx.get_edge_attributes(G, \"weight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b2e4e80b-31ef-4fef-bd0b-cec0efeb780b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{('b', 'a'): 1, ('b', 'd'): 2, ('b', 'c'): 4, ('a', 'c'): 5, ('d', 'c'): 3}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "G_edge_labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a682f526-2b76-4cc3-840f-0c293ff94f9f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化\n",
    "plt.figure(figsize = (6,6))\n",
    "pos = nx.spring_layout(G, seed = 28)\n",
    "nx.draw_networkx(G, \n",
    "                 pos = pos,\n",
    "                 node_color = '#0058FF',\n",
    "                 with_labels = True,\n",
    "                 node_size = 188)\n",
    "nx.draw_networkx_edge_labels(G, pos, \n",
    "                             G_edge_labels)\n",
    "plt.savefig('无向图.svg')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8e6351d9-f203-4e12-a3b8-c5231d4b34e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建有向图\n",
    "Di_G = nx.from_pandas_edgelist(\n",
    "    edges_df,\n",
    "    source = \"source\", \n",
    "    target = \"target\",\n",
    "    edge_key=\"edge_key\",\n",
    "    edge_attr=[\"weight\"],\n",
    "    create_using=nx.DiGraph())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "15dfedbe-d605-410e-b64d-200be3b692e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "Di_G_edge_labels = nx.get_edge_attributes(Di_G, \"weight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "71f9a51c-4224-40e3-906a-579fdd4486cb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeUAAAHiCAYAAADWNdTaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABVhklEQVR4nO3dd1hTZ/8G8DsJDlRwT0BxWwKIC1FRXOACTrWK1lW1tlp3a3dra+drrbbW0WrrqHU2qVYBQRBcuCcCoe4FuCeooELy+yO/tLWKgiQ8J8n9uS4vBU5Obt63cvt88+QchcFgMICIiIiEU4oOQEREREYsZSIiIplgKRMREckES5mIiEgmWMpEREQywVImIiKSCZYyERGRTLCUiYiIZMKhIAfp9XpcuHABTk5OUCgUls5ERERkMwwGA7KyslCrVi0olU9fCxeolC9cuAA3NzezhCMiIrJHaWlpcHV1feoxBSplJyenv0/o7Oxc9GRERER2IjMzE25ubn936dMUqJRNI2tnZ2eWMhER0XMoyMu/3OhFREQkEyxlIiIimWApExERyQRLmYiISCZYykRERDLBUiYiIpIJljIREZFMsJSJiIhkgqVMREQkEyxlIiIimWApExERyQRLmYiISCZYykRERDLBUiYiIpIJljIREZFMsJSJiIhkgqVMREQkEyxlIiIimWApExERyQRLmYiISCZYykRERDLBUiYiIpIJljIREZFMsJSJiIhkgqVMREQkEyxlIiIimWApExERyYSD6ABERJaWeBZYlgBk3ASysgEnR8ClIjCkPeDjLjod0T9YykRkkx7kAprdwHsfTcWFhM+g6nMVhlJVoDcASoXx13dRgG99YHw3IKwNUJI/EUkwjq+JyOZczwICPgOG/AhcuGn8XJ4B0BuMf9YbgFy98c8HThuPC/jM+DgikVjKRGRTrmUCflOA/af//xOGpx9vKur9p42PYzGTSCxlIrIZD3KBkG+BM1eBPH3hHpunNz4ueLrxPEQisJSJyGZodgN7TuZTyPevATvDgD+cgbWVgUMTgbycRw7J0xsfr91TPHmJ/oulTEQ2Y06McQPXE+0MM5Zw0/8BNXsCx2cD+19/7DClwngeIhG415CIbMLhM8C+U085oFxdoP16458bjgVKOAMnfwSavA1U8P77ML0B2HvS+DYqvl2KihtXykRkE5bvABye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\n",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化\n",
    "plt.figure(figsize = (6,6))\n",
    "nx.draw_networkx(Di_G, \n",
    "                 pos = pos,\n",
    "                 node_color = '#0058FF',\n",
    "                 with_labels = True,\n",
    "                 node_size = 188)\n",
    "nx.draw_networkx_edge_labels(Di_G, pos, \n",
    "                             Di_G_edge_labels)\n",
    "plt.savefig('有向图.svg')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f7837ed2-ae3d-4f9b-b971-412fe79fe44f",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
